{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "707ce9ee-b943-4c70-a546-4aa7ef2e1e6a",
   "metadata": {},
   "source": [
    "## 导入包"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 146,
   "id": "0256b3b1-fda7-426e-9baf-2e71e62126b2",
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.linear_model import LinearRegression\n",
    "from sklearn import svm\n",
    "from sklearn.ensemble import RandomForestRegressor\n",
    "from sklearn.neighbors import KNeighborsRegressor\n",
    "from sklearn.tree import DecisionTreeRegressor\n",
    "from sklearn.ensemble import GradientBoostingRegressor\n",
    "import lightgbm as lgb\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "from sklearn.preprocessing import StandardScaler,MinMaxScaler\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.metrics import mean_squared_error\n",
    "from sklearn.metrics import mean_absolute_error\n",
    "from sklearn.metrics import r2_score\n",
    "from sklearn.preprocessing import LabelEncoder\n",
    "from tqdm import tqdm"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 147,
   "id": "1e5c27de-e20d-4631-b51f-292a85a33459",
   "metadata": {},
   "outputs": [],
   "source": [
    "data = pd.read_csv(\"data_result.csv\").drop(\"Unnamed: 0\",axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 148,
   "id": "a9c29396-b4e2-4ae8-bbcd-9f9fa305cfdf",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>configs</th>\n",
       "      <th>area</th>\n",
       "      <th>direction</th>\n",
       "      <th>floor</th>\n",
       "      <th>build_year</th>\n",
       "      <th>region</th>\n",
       "      <th>price</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>5</td>\n",
       "      <td>85.83</td>\n",
       "      <td>6</td>\n",
       "      <td>1</td>\n",
       "      <td>2008</td>\n",
       "      <td>宝安</td>\n",
       "      <td>745.9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>5</td>\n",
       "      <td>92.58</td>\n",
       "      <td>6</td>\n",
       "      <td>3</td>\n",
       "      <td>2006</td>\n",
       "      <td>宝安</td>\n",
       "      <td>818.4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>7</td>\n",
       "      <td>96.00</td>\n",
       "      <td>6</td>\n",
       "      <td>3</td>\n",
       "      <td>2015</td>\n",
       "      <td>宝安</td>\n",
       "      <td>150.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>8</td>\n",
       "      <td>139.74</td>\n",
       "      <td>6</td>\n",
       "      <td>1</td>\n",
       "      <td>2007</td>\n",
       "      <td>宝安</td>\n",
       "      <td>1151.5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>7</td>\n",
       "      <td>96.00</td>\n",
       "      <td>6</td>\n",
       "      <td>3</td>\n",
       "      <td>2015</td>\n",
       "      <td>宝安</td>\n",
       "      <td>150.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   configs    area  direction  floor  build_year region   price\n",
       "0        5   85.83          6      1        2008     宝安   745.9\n",
       "1        5   92.58          6      3        2006     宝安   818.4\n",
       "2        7   96.00          6      3        2015     宝安   150.0\n",
       "3        8  139.74          6      1        2007     宝安  1151.5\n",
       "4        7   96.00          6      3        2015     宝安   150.0"
      ]
     },
     "execution_count": 148,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 149,
   "id": "813a6c99-a446-4644-9f31-1f8fff3aa493",
   "metadata": {},
   "outputs": [],
   "source": [
    "encoder = LabelEncoder()\n",
    "data_build_year = encoder.fit_transform(data['build_year'])\n",
    "data['build_year'] = data_build_year"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 150,
   "id": "f3900edc-e341-416a-b82c-bdc83a3d554b",
   "metadata": {},
   "outputs": [],
   "source": [
    "encoder_region = LabelEncoder()\n",
    "data_region = encoder.fit_transform(data['region'])\n",
    "data['region'] = data_region"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4f9128e0-d405-4393-bb69-c705eba2ac2d",
   "metadata": {},
   "source": [
    "## 数据标准化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 151,
   "id": "c59a10a9-0ced-4f53-8b6f-3a79c39fcece",
   "metadata": {},
   "outputs": [],
   "source": [
    "X = data.drop(\"price\",axis=1)\n",
    "y = data['price']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 152,
   "id": "f5c93516-9e38-4dc3-ae9a-ff074ad8263e",
   "metadata": {},
   "outputs": [],
   "source": [
    "scaler = StandardScaler() #实例化\n",
    "scaler = scaler.fit(X) #fit，在这里本质是生成min(x)和max(x)\n",
    "result_X = scaler.transform(X) #通过接口导出结果"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d6e8ca06-f424-4f30-a044-8f76cb68700d",
   "metadata": {},
   "source": [
    "## 数据归一化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "id": "f317727c-e68c-48ae-8047-691eec625d0e",
   "metadata": {},
   "outputs": [],
   "source": [
    "minmaxscaler = MinMaxScaler()\n",
    "minmaxscaler = minmaxscaler.fit(X) #fit，在这里本质是生成min(x)和max(x)\n",
    "result_X = minmaxscaler.transform(X) #通过接口导出结果"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e81bdcfb-1154-41b9-813a-5088597c1073",
   "metadata": {},
   "source": [
    "## 划分训练集和验证集"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 153,
   "id": "918b562a-65a7-4119-8692-16d0c7d36a25",
   "metadata": {},
   "outputs": [],
   "source": [
    "train_X,test_X, train_y, test_y = train_test_split(result_X,\n",
    "                                                   y,\n",
    "                                                   test_size = 0.2,\n",
    "                                                   random_state = 0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 154,
   "id": "515abcd0-77a4-418b-a874-d6e7da67aa48",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 训练模型并进行评估\n",
    "def train_model(model):\n",
    "    model.fit(train_X,train_y)\n",
    "    pred = model.predict(test_X)\n",
    "    mse = mean_squared_error(test_y,pred)\n",
    "    rmse =np.sqrt(mean_squared_error(test_y,pred))\n",
    "    mae = mean_absolute_error(test_y,pred)\n",
    "    r2 = r2_score(test_y,pred)\n",
    "    print(\"测试集合上R^2 = {:.3f} \".format(r2))\n",
    "    return mse,rmse,mae,r2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 155,
   "id": "34a6c194-c73d-4b0a-95b6-d45f33c81f4b",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "测试集合上R^2 = 0.567 \n"
     ]
    }
   ],
   "source": [
    "lr = LinearRegression()\n",
    "lr_mse,lr_rmse,lr_mae,lr_r2 = train_model(lr)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 178,
   "id": "d9bfcdad-03a6-4e02-b235-a9abeaa1362f",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "测试集合上R^2 = 0.079 \n"
     ]
    }
   ],
   "source": [
    "svm_model = svm.SVR()\n",
    "svm_mse,svm_rmse,svm_mae,svm_r2 = train_model(svm_model)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 157,
   "id": "939cd7b5-97bf-40fc-976e-ed6ef7140ad5",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "测试集合上R^2 = 0.781 \n"
     ]
    }
   ],
   "source": [
    "knei = KNeighborsRegressor()\n",
    "knei_mse,knei_rmse,knei_mae,knei_r2 = train_model(knei)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 158,
   "id": "fc905d5c-4165-4d92-9964-cb5ac7162a29",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "测试集合上R^2 = 0.858 \n"
     ]
    }
   ],
   "source": [
    "tree = DecisionTreeRegressor()\n",
    "tree_mse,tree_rmse,tree_mae,tree_r2 = train_model(tree)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 159,
   "id": "4166f835-38e3-4ce4-993b-b37f70e07b53",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "测试集合上R^2 = 0.890 \n"
     ]
    }
   ],
   "source": [
    "grboost = GradientBoostingRegressor()\n",
    "grb_mse,grb_rmse,grb_mae,grb_r2 = train_model(grboost)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 160,
   "id": "cc0b1ba2-d2bc-40ce-9cd4-1779972e5ef7",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "测试集合上R^2 = 0.583 \n"
     ]
    }
   ],
   "source": [
    "lgb_model = lgb.LGBMRegressor(objective='regression', num_leaves=31, learning_rate=0.05, n_estimators=20)\n",
    "lgb_mse,lgb_rmse,lgb_mae,lgb_r2 = train_model(lgb_model)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 180,
   "id": "f24cd7db-4825-4394-8835-5aa55e442696",
   "metadata": {},
   "outputs": [],
   "source": [
    "r2_all = [lr_r2,svm_r2,knei_r2,tree_r2,grb_r2,lgb_r2]\n",
    "mse_all = [lr_mse,svm_mse,knei_mse,tree_mse,grb_mse,lgb_mse]\n",
    "rmse_all = [lr_rmse,svm_rmse,knei_rmse,tree_rmse,grb_rmse,lgb_rmse]\n",
    "mae_all = [lr_mae,svm_mae,knei_mae,tree_mae,grb_mae,lgb_mae]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 182,
   "id": "1ce74d11-ddae-4fc7-8d22-8129e3e3f547",
   "metadata": {},
   "outputs": [],
   "source": [
    "x = range(len(r2_all))\n",
    "name_list = [\"lr\",\"svm\",\"KNeighbors\",\"tree\",\"GRboost\",\"lgb\"]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 183,
   "id": "41c57a82-4f84-4eac-b9a4-806f58a5df2b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5, 1.0, 'R^2 value with each model')"
      ]
     },
     "execution_count": 183,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiMAAAGxCAYAAACwbLZkAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAA9hAAAPYQGoP6dpAABIOElEQVR4nO3deVzVVeL/8feV5YKggKK4g7niluWWOo6KiCKZX8tylDK30rE0o8ZcJtcaZ6oxp0VzS21yG9dJY0zcnVwxzUpccl8wAsGlDAXP749+3Ol6EQHBj+jr+XjcR93zOedzzzn3Xnnfz+d87rUZY4wAAAAsUszqDgAAgPsbYQQAAFiKMAIAACxFGAEAAJYijAAAAEsRRgAAgKUIIwAAwFKEEQAAYCnCCAAAsBRhBEXanDlzZLPZHDd3d3eVL19ef/jDH3T48OFbtt+xY4fGjh2rpUuX3rROZmamJk2apI4dO6pSpUoqXry4QkNDNXz4cKWlpRXgaHKvTZs2atOmjSWPnR9Zz9Px48cdZfPnz9fkyZNd6h4/flw2m03vvPPOnetgAWjTpo3q1atndTfyrXfv3goJCclX26L2esTdx93qDgAFYfbs2apdu7Z++eUXffnll3rzzTe1YcMGHThwQAEBAdm22bZtmzp06KDMzExduXJF06dPV//+/V3qXblyRWPHjlWPHj3Uv39/BQYG6quvvtIbb7yhlStXKj4+Xt7e3oU9xCItKipK27ZtU/ny5R1l8+fP17fffquhQ4da1zEAdwXCCO4J9erVU+PGjSX9+iktMzNTY8aM0YoVK9SnTx+X+rt27VLHjh3VoEEDLV++XCNHjtTzzz8vd3d39e7d26mut7e3jh07ptKlSzvK2rRpoypVqujJJ5/U0qVL9fTTTxfq+Iq6MmXKqEyZMlZ3A8BditM0uCdlBZMffvjBZdvu3bsVERGhdu3aae3atSpTpoxmzJih0aNHq1+/fvr000+d6ru5uTkFkSxNmzaVJJ06dSrHvjz00ENq1aqVS3lmZqYqVqyoxx9/3FE2btw4NWvWTKVKlVLJkiX18MMPa9asWbrV71lu3LhRNptNGzdudCrPOuUxZ84cp/L4+Hg99thjKlWqlLy8vPTQQw/pX//6V46PIUlNmjRRVFSUU1n9+vVls9m0a9cuR9myZctks9n0zTffSHI9TdOmTRt9/vnnOnHihNNpthtNmjRJVatWla+vr5o3b67t27ffso+SdO7cOQ0YMECVKlWSp6enqlatqnHjxikjI8OpXl7me/78+WrevLl8fX3l6+urhg0batasWS71du3apVatWql48eJ64IEH9Ne//lXXr1+/ZZ9tNptefPFFzZ49W7Vq1ZK3t7caN26s7du3yxijt99+2zEXYWFh+v7771328fHHH+vBBx+Ul5eXSpUqpa5duyohIcGl3pw5c1SrVi3Z7XaFhobqk08+ybZPV69e1RtvvKHatWvLbrerTJky6tOnj3788cdbjgfIC46M4J507NgxSVLNmjWdyvfu3auIiAj17NlT77//vooV+18eHzt2rCpVqqT+/fvLzc1NPXr0yPEx1q9fL0mqW7dujvX69Omjl156SYcPH1aNGjUc5WvWrNHZs2edjtwcP35cAwYMUJUqVSRJ27dv1+DBg3XmzBmNHj06FyO/tQ0bNqhjx45q1qyZPvroI/n5+WnhwoXq3r27fv75Z5cjQ78VHh6uDz74QNeuXZOHh4d++OEHffvtt/L29lZcXJyaNGkiSVq7dq2CgoJUv379bPczZcoUPf/88zpy5IiWL1+ebZ0PP/xQtWvXdqwref3119WpUycdO3ZMfn5+N+3juXPn1LRpUxUrVkyjR49WtWrVtG3bNr3xxhs6fvy4Zs+e7aib2/kePXq0JkyYoMcff1yvvPKK/Pz89O233+rEiRMujx0dHa1XXnlFY8aM0fLlyzVixAhVqFBBvXr1ummfs6xatUp79uzRX//6V9lsNr322muKiorSs88+q6NHj+qDDz7QhQsXFBMToyeeeEJ79+51hLiJEydq5MiR6tGjhyZOnKiUlBSNHTtWzZs3165duxyvvTlz5qhPnz7q0qWL/v73v+vChQsaO3as0tPTnd4P169fV5cuXbRlyxYNGzZMLVq00IkTJzRmzBi1adOG05MoWAYowmbPnm0kme3bt5tr166ZS5cumdWrV5ty5cqZ3//+9+batWuF8rinT582QUFBpnHjxiYzMzPHusnJycbT09OMHDnSqfypp54yQUFBN+1jZmamuXbtmhk/frwpXbq0uX79umNb69atTevWrR33N2zYYCSZDRs2OO3j2LFjRpKZPXu2o6x27drmoYcecnncRx991JQvXz7H8axdu9ZIMps3bzbGGPPpp5+aEiVK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AgICtHbtWqd669atU506deTuzsFoIDu8MwDcNwr7x908PT01evRoDRs2TP7+/mrWrJlWrlypzz//XMuXL7dkzMi9316mjdwriHmzmSIw+xcvXpSfn58uXLigkiVLWt0dAEVQ1o+rXTt/RufjPlL6mf2OH3fzb91bxTzsjrrJn7+rn75dp+DXVjnKMn9KU9qWT3Xl+J7//bhbrRbya95dxTy9nR7rYvy/dSn+M2VcSpG7fzn5NX9SvvXaFdlLRW/02x+zs1JBzee1a9f0/fffq0KFCi7fJYNbS0lJUVJSkmrWrCk3Nzenbbn9+82REQD3lcL+cTdJKtm4i0o27pLvPuLOcnd3V/HixfXjjz/Kw8NDxYqxgiE3jDH6+eeflZSUJH9/f5cgkheEEQDAfc1ms6l8+fI6duyYYzEycs/f31/lypW7rX0QRgAA9z1PT0/VqFFDV69etborRYqHh8dtHRHJQhgBAEBSsWLF5OXlZXU37kucGAMAAJYijAAAAEsRRgAAgKUIIwAAwFKEEQAAYCnCCAAAsBRhBAAAWIowAgAALEUYAQAAliKMAAAASxFGAACApQgjAADAUoQRAABgKcIIAACwVL7CyJQpU1S1alV5eXmpUaNG2rJlS471582bpwcffFDFixdX+fLl1adPH6WkpOSrw8D95tChQ+rYsaN8fHxUtmxZvfTSS7py5UqObY4fPy6bzZbtzW63u9Tt0aOHKlSoIF9fXz388MOaN29eYQ4JAJy457XBokWLNHToUE2ZMkUtW7bUtGnTFBkZqf3796tKlSou9f/73/+qV69eevfdd9W5c2edOXNGAwcOVP/+/bV8+fICGQRwr0pLS1NYWJiCg4O1dOlSJSUlKSYmRikpKfr0009v2q58+fLatm2bU5kxRpGRkWrbtq2j7JdfflFERIRsNpveffddlS5dWgsWLNDTTz8tb29vPf7444U2NgDIkucwMmnSJPXr10/9+/eXJE2ePFlffPGFpk6dqokTJ7rU3759u0JCQjRkyBBJUtWqVTVgwAC99dZbt9l14N43bdo0paamau/evQoMDJQkubu7Kzo6WqNGjVJoaGi27ex2ux555BGnso0bN+rChQvq2bOnoyw+Pl6HDx/W+vXrHSElPDxc27dv16JFiwgjAO6IPJ2muXr1qnbv3q2IiAin8oiICG3dujXbNi1atNDp06cVGxsrY4x++OEHLVmyRFFRUTd9nPT0dF28eNHpBtyPYmNjFR4e7ggikvTEE0/IbrcrNjY2T/uaP3++SpYsqc6dOzvKrl27Jkny8/Nzquvn5ydjzG30HAByL09hJDk5WZmZmQoKCnIqDwoK0rlz57Jt06JFC82bN0/du3eXp6enypUrJ39/f73//vs3fZyJEyfKz8/PcatcuXJeugncMxISElyOftjtdlWrVk0JCQm53s+1a9e0dOlSde3aVV5eXo7y3/3ud6pTp45Gjhypo0eP6sKFC5o+fbri4+M1cODAAhsHAOQkXwtYbTab031jjEtZlv3792vIkCEaPXq0du/erdWrV+vYsWM5/kM3YsQIXbhwwXE7depUfroJFHmpqany9/d3KQ8ICND58+dzvZ///Oc/On/+vNMpGkny8PDQhg0blJaWpmrVqsnf31+DBw/W3LlzFRYWdrvdB4BcydOakcDAQLm5ubkcBUlKSnI5WpJl4sSJatmypf70pz9Jkho0aCAfHx+1atVKb7zxhsqXL+/Sxm63u6z4B+5X2QX9nD4AZGfevHkKCgpSu3btnMqvXLmibt26KTMzU8uWLZOfn58+++wz9enTRwEBAerYseNt9x8AbiVPYcTT01ONGjVSXFycunbt6iiPi4tTly5dsm3z888/y93d+WHc3NwkiXPSwC0EBAQoNTXVpTwtLe2mi1dvdPnyZa1atUr9+/d3vPeyzJo1Szt27NDp06dVpkwZSVJYWJhOnDihYcOGEUYA3BF5Pk0TExOjmTNn6uOPP1ZCQoJefvllnTx50nHaZcSIEerVq5ejfufOnbVs2TJNnTpVR48e1ZdffqkhQ4aoadOmqlChQsGNBLgHhYaGuqwNSU9P15EjR3IdRpYvX66ff/7Z5RSN9Otp1IoVKzqCSJaGDRvqyJEj+e84AORBni/t7d69u1JSUjR+/HglJiaqXr16io2NVXBwsCQpMTFRJ0+edNTv3bu3Ll26pA8++ECvvPKK/P39FRYWpr/97W8FNwrgHtWpUydNmDBBKSkpKl26tKRfw0V6ero6deqUq33Mnz9f1apVU7NmzVy2BQcH68yZM0pKSlLZsmUd5fHx8QoJCSmQMQDArdhMEThXcvHiRfn5+enChQsqWbKk1d0B7pi0tDTVq1dPISEhev311x1fetahQwenLz3r16+f5s6dq4yMDKf2P/74oypUqKDhw4drwoQJLvs/ffq06tWrp2rVqmn48OHy9/fX8uXLNXXqVE2dOvWeuqImZPjnVndBx/968680KEruhrmU7p35vJfl9u83v00D3MX8/f21fv16+fj46PHHH1dMTIx69OihGTNmONXLzMxUZmamS/t//etfysjIyPYUjSRVqlRJGzduVPny5TV48GB17dpV27Zt08yZMzVgwIBCGRMA3IgjI8Bdik+fBetumE/msmDdK/N5L+PICAAAKBIIIwAAwFKEEQAAYCnCCAAAsBRhBAAAWIowAgAALEUYAQAAliKMAAAASxFGAACApQgjAADAUoQRAABgKcIIAACwFGEEAABYijACAAAsRRgBAACWIowAAABLEUYAAIClCCMAAMBShBEAAGApwggAALAUYQQAAFiKMAIAACxFGAEAAJYijAAAAEsRRgAAgKUIIwAAwFKEEQAAYCnCCAAAsBRhBAAAWIowAgAALEUYAQAAliKMAAAASxFGAACApQgjAADAUoQRAABgKcIIAACwFGEEAABYijACAAAsRRgBAACWIowAAABLEUYAAIClCCMAAMBShBEAAGApwggAALAUYQQAAFiKMAIAACxFGAEAAJYijAAAAEsRRgAAgKUIIwAAwFKEEQAAYCnCCAAAsBRhBAAAWIowAgAALEUYAQAAliKMAAAASxFGAACApQgjAADAUoQRAABgKcIIAACwFGEEAABYijACAAAsRRgBAACWIowAAABLEUYAAIClCCMAANwFDh06pI4dO8rHx0dly5bVSy+9pCtXrtyyXZs2bWSz2VxuBw4ccKp3/Phx9ejRQxUqVJCvr68efvhhzZs3r7CGkyf5CiNTpkxR1apV5eXlpUaNGmnLli051k9PT9eoUaMUHBwsu92uatWq6eOPP85XhwEAuNekpaUpLCxMly5d0tKlS/XOO+9o3rx5eu6553LVvmXLltq2bZvTLSQkxLH9l19+UUREhL766iu9++67WrFihR566CE9/fTTWrZsWSGNKvfc89pg0aJFGjp0qKZMmaKWLVtq2rRpioyM1P79+1WlSpVs2zz11FP64YcfNGvWLFWvXl1JSUnKyMi47c4DAHAvmDZtmlJTU7V3714FBgZKktzd3RUdHa1Ro0YpNDQ0x/b+/v565JFHbro9Pj5ehw8f1vr169W2bVtJUnh4uLZv365Fixbp8ccfL7jB5EOej4xMmjRJ/fr1U//+/RUaGqrJkyercuXKmjp1arb1V69erU2bNik2Nlbh4eEKCQlR06ZN1aJFi9vuPAAA94Ksv5FZQUSSnnjiCdntdsXGxt72/q9duyZJ8vPzcyr38/OTMea293+78hRGrl69qt27dysiIsKpPCIiQlu3bs22zWeffabGjRvrrbfeUsWKFVWzZk29+uqrOZ4HS09P18WLF51uAADcqxISElyOfmQta0hISLhl+02bNsnHx0deXl5q3bq1Nm/e7LT9d7/7nerUqaORI0fq6NGjunDhgqZPn674+HgNHDiwQMeSH3k6TZOcnKzMzEwFBQU5lQcFBencuXPZtjl69Kj++9//ysvLS8uXL1dycrIGDRqk8+fP33TdyMSJEzVu3Li8dA0AgCIrNTVV/v7+LuUBAQE6f/58jm1bt26tXr16qUaNGjp79qzeeecdhYeHa9OmTWrevLkkycPDQxs2bNBjjz2matWqSZI8PT01d+5chYWFFfh48irPa0YkyWazOd03xriUZbl+/bpsNpvmzZvnODw0adIkdevWTR9++KG8vb1d2owYMUIxMTGO+xcvXlTlypXz01UAAIqE7P6O5vT3NcuNH94fffRR1a1bVxMmTHCc4rly5Yq6deumzMxMLVu2TH5+fvrss8/Up08fBQQEqGPHjgU3kHzI02mawMBAubm5uRwFSUpKcjlakqV8+fKqWLGi03mq0NBQGWN0+vTpbNvY7XaVLFnS6VbYCvOSqjlz5mRbx2azWf4CAABYLyAgQKmpqS7laWlpCggIyNO+fHx8FBUVpd27dzvKZs2apR07dig2NlZdu3ZVWFiYJk+erMjISA0bNuy2+3+78nRkxNPTU40aNVJcXJy6du3qKI+Li1OXLl2ybdOyZUstXrxYly9flq+vr6Rf//AXK1ZMlSpVuo2uF5ysS6qCg4O1dOlSJSUlKSYmRikpKfr0009v2b5ly5Z65513nMp+e0lVVFSUtm3b5rT98OHD6tWrlyIjIwtkDACAois0NNRlbUh6erqOHDmivn375nl/Ny5K3b9/vypWrKgyZco4lTds2FBr1qzJe4cLWJ5P08TExOiZZ55R48aN1bx5c02fPl0nT550LIAZMWKEzpw5o08++USS1LNnT02YMEF9+vTRuHHjlJycrD/96U/q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hJF8ujGM/N///Z+1HboL7d6920gyx48fd9k2ZMgQExYW5rj/xRdfGE9PT3P+/HljzK9hRJL5/vvvHXUGDBhgihcvbi5duuQo69ChgxkwYEAhjiJ3nn32WePp6WkkmXXr1rlszwojxhjzhz/8wTH2G8PI66+/biIiIpzanjp1yvGPqjHOr72EhAQjyezatctR//Dhw0aSyz9Qf/7znx33L1++bGw2m/nPf/5jjPnfH4/fBruUlBTj7e1tFi1aZIwxpmfPnqZ9+/ZOffvTn/5k6tSp47if3Xth8ODBJiwszFy/fj37ybPIjaEuaw5WrFjhKLt8+bLx8vIyW7dudWrbr18/06NHD2NM7p6zu9327duNJLNs2TKn8tKlSxsfHx/j4+Njhg0bZoz59Tn29PQ0Pj4+xsPDw0gyXl5e5ssvv3S0K4jX06FDh4wkp/0mJycbb29v869//csYY0z9+vXN2LFjsx1TVh9SU1PzOSt3h6zXaV7e6wMHDnTaR7Nmzcwf//jHO9XlfOE0TQFp3Lix1V246zz44INq166d6tevryeffFIzZsxQamqqJCk6OlobN27U2bNnJUnz5s1Tp06dFBAQ4GhfvHhxVatWzXE/KChIISEh8vX1dSpLSkq6QyPKWYMGDRQSEqLRo0fr0qVLN633xhtvaMuWLdke1t69e7c2bNggX19fx6127dqSpCNHjrjUP3jwoNzd3fXwww87yqpXr+40j7/tXxYfHx+VKFHCZe6aN2/u+P9SpUqpVq1aSkhIkCQlJCSoZcuWTvVbtmypw4cPO50qu/G90Lt3b+3du1e1atXSkCFDsh333eS3/d+/f79++eUXtW/f3uk5+eSTTxzPR16fs7uZzWZzur9z507t3btXdevWVXp6uqP8T3/6k/bu3atNmzapbdu2GjVqVLa/3H47r6eEhAS5u7urWbNmju2lS5d22seQIUP0xhtvqGXLlhozZoz27dt3+5Nwl8rLe/238551P2vO7laEkQLi4+NjdRfuOm5uboqLi9N//vMf1alTR++//75q1aqlY8eOqWnTpqpWrZoWLlyoK1euaPny5Xr66aed2nt4eDjdt9ls2ZZdv3690MeSGxUrVtSmTZuUmJiojh073jSQVKtWTc8995yGDx/ucgXC9evX1blzZ+3du9fpdvjwYf3+97932deN7XMqz+/cZf2BMsa4/LHK7nFufC88/PDDOnbsmCZMmKArV67oqaeeUrdu3W75uFb5bf+z5ufzzz93ej7279/vWDeS1+fsblS9enXZbDYdOHDAqfyBBx5Q9erV5e3t7VQeGBio6tWrq3nz5lq6dKneffddpwWuOcnt6ymn13ZWu/79++vo0aN65pln9M0336hx48Z6//33c9WPoiYv7/Xs3DjXdxvCCAqVzWZTy5YtNW7cOO3Zs0eenp5avny5JKlnz56aN2+eVq5cqWLFiikqKsri3t6+KlWqaNOmTUpKSlJERIQuXryYbb3Ro0fr0KFDWrhwoVP5ww8/rO+++04hISGqXr260y27wFu7dm1lZGRoz549jrLvv/8+35czbt++3fH/qampOnTokONTfp06dfTf//7Xqf7WrVtVs2ZNubm55bjfkiVLqnv37poxY4YWLVqkpUuX6vz58/nqY0Hx9PS85eLnOnXqyG636+TJky7PR+XKlSXl/Tm7G5UuXVrt27fXBx98oJ9++ilPbbMWkr/66qsufxhv5/VUp04dZWRkaMeOHY7tKSkpOnTokEJDQx1llStX1sCBA7Vs2TK98sormjFjhqRfn19Jd90C9/zKy3v9t/OedT9r3u9WhBEUmh07dugvf/mL4uPjdfLkSS1btkw//vij4x+S6OhoffXVV3rzzTfVrVs3eXl5WdzjglGpUiVt3LhRKSkpioiI0IULF1zqBAUFKSYmRu+9955T+QsvvKDz58+rR48e2rlzp44ePao1a9aob9++2f6jWrt2bYWHh+v555/Xzp07tWfPHj3//PPy9vbO1yeh8ePHa926dfr222/Vu3dvBQYGOr4/5ZVXXtG6des0YcIEHTp0SHPnztUHH3ygV199Ncd9vvvuu1q4cKEOHDigQ4cOafHixSpXrpz8/f3z3L+CFBISoh07duj48eNKTk7O9ihRiRIl9Oqrr+rll1/W3LlzdeTIEe3Zs0cffvih5s6dKynvz9ndasqUKcrIyFDjxo21aNEiJSQk6ODBg/r000914MCBHAPnCy+8oIMHD2rp0qVO5bfzeqpRo4a6dOmi5557Tv/973/19ddf6+mnn1bFihXVpUsXSdLQoUP1xRdf6NixY/rqq6+0fv16x78vwcHBstlsWrVqlX788Uddvny5EGbtzsnLe33x4sX6+OOPdejQIY0ZM0Y7d+7Uiy++aFHPc8mapSpF340LWH+7gAi/2r9/v+nQoYMpU6aMsdvtpmbNmub99993qtOkSRMjyaxfv96pfPbs2cbPz8+p7LeLQLNkXcVitez6cfbsWVOrVi3TpEkT89JLL7n0/eLFiyYwMNBpAasxvy7c69q1q/H39zfe3t6mdu3aZujQoY4FoDcuvDx79qyJjIw0drvdBAcHm/nz55uyZcuajz76yFFHklm+fLnT4/v5+TmuXMha7Ldy5UpTt25d4+npaZo0aWL27t3r1GbJkiWmTp06xsPDw1SpUsW8/fbbTtuzey9Mnz7dNGzY0Pj4+JiSJUuadu3ama+++irnCb0DDh48aB555BHj7e1tJDkWTd+44PH69evmH//4h6lVq5bx8PAwZcqUMR06dDCbNm1y1LnVc1ZUnD171rz44oumatWqxsPDw/j6+pqmTZuat99+2/z000/GmJv/e/fcc8+ZunXrmszMzAJ7PZ0/f94888wzxs/Pz3h7e5sOHTqYQ4cOOba/+OKLplq1asZut5syZcqYZ555xiQnJzu2jx8/3pQrV87YbDbz7LPPFtxE3UG/fb/n9r3+4Ycfmvbt2zvqLViwwKLe557NmLvsa/MA3JbTp0+rcuXKWrt2rdq1a2d1dwAUknvpvU4YAYq49evX6/Lly6pfv74SExM1bNgwnTlzRocOHXJZtAqg6LqX3+vuVncAwO25du2aRo4cqaNHj6pEiRJq0aKF5s2bV+T/cQLg7F5+r3NkBAAAWIqraQAAgKUIIwAAwFKEEQAAYCnCCAAAsBRhBAAAWIowAgAALEUYAQAAliKMAAAAS/0/E8qP9q4GoYsAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "rects1 = plt.bar(x=x, height=r2_all, width=0.4, label=\"R^2\")\n",
    "for a,b in zip(x,r2_all):\n",
    "    plt.text(a, b,'%.2f'%b, ha = 'center',va ='baseline',fontsize=11)\n",
    "plt.xticks([index for index in x], name_list)\n",
    "plt.legend()\n",
    "plt.title(\"R^2 value with each model\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "id": "1e77e6ee-c56e-4ff5-82ff-0035af001035",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5, 1.0, 'MSE and MAE value with each model')"
      ]
     },
     "execution_count": 61,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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oCAcO3YMycnJaNu2LTIzM0vmiIiIiKjM0yzyCpqaaldNsgkhMG/ePEyYMAGdOnUCAKxZswbm5ubYuHEjBg4ciMTERKxYsQLr1q2Dh4cHAGD9+vWwtrbGwYMH0apVq7c8HCIiIvoQFPkKyvXr12FlZQVbW1t0794dN2/eBADExMQgLi4OXl5eUqyOjg5cXV1x/PhxAEBERARevnypFmNlZYU6depIMXlJS0tDUlKS2kREREQfriIlKI0aNcLatWuxf/9+LFu2DHFxcXBxccHjx48RFxcHADA3N1dbx9zcXFoWFxcHbW1tVKhQId+YvAQGBkKlUkmTtbV1UapNREREZUyREhRvb2907twZjo6O8PDwwJ49ewC8upWTTaFQqK0jhMhVltObYvz9/ZGYmChNd+7cKUq1iYiIqIx5q2HG+vr6cHR0xPXr16V+KTmvhMTHx0tXVSwsLJCeno6EhIR8Y/Kio6MDIyMjtYmIiIg+XG+VoKSlpeHKlSuwtLSEra0tLCwsEBISIi1PT09HeHg4XFxcAAANGjSAlpaWWkxsbCwuXrwoxRAREREVaRTP6NGj4ePjgypVqiA+Ph7Tpk1DUlIS+vTpA4VCAT8/P8yYMQN2dnaws7PDjBkzoKenh549ewIAVCoVfH19MWrUKJiYmMDY2BijR4+WbhkRERERAUVMUO7evYsePXrg0aNHqFixIho3bowTJ07AxsYGADB27FikpqZi8ODBSEhIQKNGjXDgwAEYGhpK25g7dy40NTXRtWtXpKamwt3dHatXr4aGhkbJHhkRERGVWQohhCjtShRVUlISVCoVEhMT2R9FTt7QGfqdKnunMRHRR6co39/8LR4iIiKSHSYoREREJDtMUIiIiEh2mKAQERGR7DBBISIiItlhgkJERESywwSFiIiIZIcJChEREckOExQiIiKSHSYoREREJDtMUIiIiEh2mKAQERGR7DBBISIiItlhgkJERESywwSFiIiIZIcJChEREckOExQiIiKSHSYoREREJDtMUIiIiEh2mKAQERGR7DBBISIiItlhgkJERESywwSFiIiIZIcJChEREckOExQiIiKSHSYoREREJDtMUIiIiEh2mKAQERGR7DBBISIiItlhgkJERESywwSFiIiIZIcJChEREckOExQiIiKSHSYoREREJDtMUIiIiEh2mKAQERGR7DBBISIi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\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "rects3 = plt.bar(x=[i + 0.4 for i in x], height=rmse_all, width=0.4, color='red', label=\"rmse\")\n",
    "rects4 = plt.bar(x=[i + 0.8 for i in x], height=mae_all, width=0.4, color='y', label=\"mae\")\n",
    "for a,b in zip(x,rmse_all):\n",
    "    plt.text(a+0.4, b,'%.2f'%b, ha = 'center',va ='baseline',fontsize=10)\n",
    "for a,b in zip(x,mae_all):\n",
    "    plt.text(a+0.9, b,'%.2f'%b, ha = 'center',va ='baseline',fontsize=10)\n",
    "plt.xticks([index + 0.6 for index in x], name_list)\n",
    "plt.legend()\n",
    "plt.title(\"MSE and MAE value with each model\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c0a4f44b-e8d8-40de-85b8-9a3241cab140",
   "metadata": {},
   "source": [
    "## torch 深度神经网络回归预测房价"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 164,
   "id": "8bf9aa7b-9621-484b-ae33-0f6ffcdc99d0",
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch\n",
    "import torch.nn as nn\n",
    "import torch.nn.functional as F\n",
    "from torch.optim import SGD\n",
    "import torch.utils.data as Data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 165,
   "id": "b3ecc5ae-df56-4c86-9c22-70fa483ceda2",
   "metadata": {},
   "outputs": [],
   "source": [
    "device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 166,
   "id": "6a8b4f2c-0e1c-4b19-b075-6baf944be07b",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 将数据集转为张量\n",
    "X_train_t = torch.from_numpy(train_X.astype(np.float32))\n",
    "y_train_t = torch.from_numpy(np.array(train_y).astype(np.float32))\n",
    "X_test_t = torch.from_numpy(test_X.astype(np.float32))\n",
    "y_test_t = torch.from_numpy(np.array(test_y).astype(np.float32))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 167,
   "id": "c7e4dd51-5429-4a47-baa1-fa08fac163b0",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 将训练数据处理为数据加载器\n",
    "train_data = Data.TensorDataset(X_train_t, y_train_t)\n",
    "test_data = Data.TensorDataset(X_test_t, y_test_t)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 168,
   "id": "3f2b36dc-8cc2-404f-b0a7-6731cf2177bf",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 搭建全连接神经网络回归\n",
    "class MLPregression(nn.Module):\n",
    "    def __init__(self):\n",
    "        super(MLPregression, self).__init__()\n",
    "        # 第一个隐含层\n",
    "        self.hidden1 = nn.Linear(in_features=6, out_features=50, bias=True)\n",
    "        # 第二个隐含层\n",
    "        # self.hidden2 = nn.Linear(50, 50)\n",
    "        # 第三个隐含层\n",
    "        # self.hidden3 = nn.Linear(100, 50)\n",
    "        # 回归预测层\n",
    "        self.predict = nn.Linear(50, 1)\n",
    "        \n",
    "    # 定义网络前向传播路径\n",
    "    def forward(self, x):\n",
    "        x = F.relu(self.hidden1(x))\n",
    "        # x = F.relu(self.hidden2(x))\n",
    "        # x = F.relu(self.hidden3(x))\n",
    "        output = self.predict(x)\n",
    "        # 输出一个一维向量\n",
    "        return output[:, 0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 169,
   "id": "8ad9724b-9adf-4be0-9769-921690f75f78",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "----------------------------------------------------------------\n",
      "        Layer (type)               Output Shape         Param #\n",
      "================================================================\n",
      "            Linear-1              [-1, 100, 50]             350\n",
      "            Linear-2               [-1, 100, 1]              51\n",
      "================================================================\n",
      "Total params: 401\n",
      "Trainable params: 401\n",
      "Non-trainable params: 0\n",
      "----------------------------------------------------------------\n",
      "Input size (MB): 0.00\n",
      "Forward/backward pass size (MB): 0.04\n",
      "Params size (MB): 0.00\n",
      "Estimated Total Size (MB): 0.04\n",
      "----------------------------------------------------------------\n"
     ]
    }
   ],
   "source": [
    "# 输出网络结构\n",
    "from torchsummary import summary\n",
    "testnet = MLPregression().to(device)\n",
    "summary(testnet, input_size=(100, 6)) # 表示1个样本，每个样本有6个特征"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 170,
   "id": "0d0f1595-1ad6-4e00-9912-60ed622ef87e",
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "# 输出网络结构\n",
    "from torchviz import make_dot\n",
    "testnet = MLPregression().to(device)\n",
    "x = torch.randn(1, 6).requires_grad_(True)\n",
    "y = testnet(x)\n",
    "myMLP_vis = make_dot(y, params=dict(list(testnet.named_parameters()) + [('x', x)]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 172,
   "id": "e6f1a8c7-08fb-45a4-8a4a-f4b3326e3ae8",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 定义超参数\n",
    "batch_size = 3000\n",
    "epochs = 100\n",
    "lr = 0.001\n",
    "# 定义模型\n",
    "testnet = MLPregression().to(device)\n",
    "# 定义优化器\n",
    "optimizer = torch.optim.SGD(testnet.parameters(), lr = lr)\n",
    "# 定义损失函数\n",
    "loss_func = nn.MSELoss() # 均方根误差损失函数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 185,
   "id": "1bd58af7-7222-4def-86e1-30d8477c0c26",
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "第1次的训练在训练集损失值为176206.0821197692\n",
      "第2次的训练在训练集损失值为311824.80140848743\n",
      "第3次的训练在训练集损失值为237110.8393881204\n",
      "第4次的训练在训练集损失值为331606.5751881169\n",
      "第5次的训练在训练集损失值为216860.77423797443\n",
      "第6次的训练在训练集损失值为175865.8120416551\n",
      "第7次的训练在训练集损失值为155148.5687517378\n",
      "第8次的训练在训练集损失值为164510.07810327748\n",
      "第9次的训练在训练集损失值为323419.7715856562\n",
      "第10次的训练在训练集损失值为142460.85297446302\n",
      "第11次的训练在训练集损失值为225447.1887946615\n",
      "第12次的训练在训练集损失值为221665.3816275372\n",
      "第13次的训练在训练集损失值为228027.32765144933\n",
      "第14次的训练在训练集损失值为140888.9193519307\n",
      "第15次的训练在训练集损失值为168640.17695589463\n",
      "第16次的训练在训练集损失值为269264.45182816626\n",
      "第17次的训练在训练集损失值为250101.542847647\n",
      "第18次的训练在训练集损失值为157595.22698934728\n",
      "第19次的训练在训练集损失值为201813.74747584458\n",
      "第20次的训练在训练集损失值为147083.28279555644\n",
      "第21次的训练在训练集损失值为187409.03414778257\n",
      "第22次的训练在训练集损失值为135786.70367457945\n",
      "第23次的训练在训练集损失值为143297.608075994\n",
      "第24次的训练在训练集损失值为169639.3184823787\n",
      "第25次的训练在训练集损失值为236865.20851652647\n",
      "第26次的训练在训练集损失值为492805.9691062491\n",
      "第27次的训练在训练集损失值为155088.7947711751\n",
      "第28次的训练在训练集损失值为136776.4106889945\n",
      "第29次的训练在训练集损失值为159657.40801278153\n",
      "第30次的训练在训练集损失值为141921.2181048415\n",
      "第31次的训练在训练集损失值为194329.3988730363\n",
      "第32次的训练在训练集损失值为203866.3945719797\n",
      "第33次的训练在训练集损失值为192869.15038926734\n",
      "第34次的训练在训练集损失值为325314.4851765605\n",
      "第35次的训练在训练集损失值为283608.9438636087\n",
      "第36次的训练在训练集损失值为168379.81771340192\n",
      "第37次的训练在训练集损失值为138321.89332510775\n",
      "第38次的训练在训练集损失值为136506.73641257125\n",
      "第39次的训练在训练集损失值为133205.82337645974\n",
      "第40次的训练在训练集损失值为131909.09308094677\n",
      "第41次的训练在训练集损失值为130634.17006768733\n",
      "第42次的训练在训练集损失值为167165.90654977062\n",
      "第43次的训练在训练集损失值为170005.38214670512\n",
      "第44次的训练在训练集损失值为130929.47696979702\n",
      "第45次的训练在训练集损失值为163393.28733664675\n",
      "第46次的训练在训练集损失值为170043.91481735714\n",
      "第47次的训练在训练集损失值为139327.2933125087\n",
      "第48次的训练在训练集损失值为135796.27250017377\n",
      "第49次的训练在训练集损失值为215257.65212489574\n",
      "第50次的训练在训练集损失值为221324.13675839358\n",
      "第51次的训练在训练集损失值为225000.00999235368\n",
      "第52次的训练在训练集损失值为410617.0354380995\n",
      "第53次的训练在训练集损失值为138522.84939567983\n",
      "第54次的训练在训练集损失值为210507.8149633324\n",
      "第55次的训练在训练集损失值为152750.45901179966\n",
      "第56次的训练在训练集损失值为219578.2359868101\n",
      "第57次的训练在训练集损失值为139765.1819412102\n",
      "第58次的训练在训练集损失值为129721.72205833797\n",
      "第59次的训练在训练集损失值为144804.03925257194\n",
      "第60次的训练在训练集损失值为141187.56036902196\n",
      "第61次的训练在训练集损失值为180335.38407892222\n",
      "第62次的训练在训练集损失值为152607.86193065307\n",
      "第63次的训练在训练集损失值为129421.45934198178\n",
      "第64次的训练在训练集损失值为133561.43326193868\n",
      "第65次的训练在训练集损失值为158603.27556847804\n",
      "第66次的训练在训练集损失值为133227.03395010775\n",
      "第67次的训练在训练集损失值为129424.19913023079\n",
      "第68次的训练在训练集损失值为197378.85276484082\n",
      "第69次的训练在训练集损失值为130360.150126425\n",
      "第70次的训练在训练集损失值为200766.98231353398\n",
      "第71次的训练在训练集损失值为147140.88188603503\n",
      "第72次的训练在训练集损失值为126115.29157905254\n",
      "第73次的训练在训练集损失值为193498.65437751982\n",
      "第74次的训练在训练集损失值为148355.67910533678\n",
      "第75次的训练在训练集损失值为209166.60658365773\n",
      "第76次的训练在训练集损失值为158360.76333544767\n",
      "第77次的训练在训练集损失值为137606.03360689213\n",
      "第78次的训练在训练集损失值为138426.34636756222\n",
      "第79次的训练在训练集损失值为134723.84641643785\n",
      "第80次的训练在训练集损失值为120620.73048015432\n",
      "第81次的训练在训练集损失值为161190.69068017518\n",
      "第82次的训练在训练集损失值为178705.09799023357\n",
      "第83次的训练在训练集损失值为128720.62524655047\n",
      "第84次的训练在训练集损失值为122455.10239121367\n",
      "第85次的训练在训练集损失值为478879.5604667732\n",
      "第86次的训练在训练集损失值为142765.47101348534\n",
      "第87次的训练在训练集损失值为160357.2230684346\n",
      "第88次的训练在训练集损失值为210780.7938946719\n",
      "第89次的训练在训练集损失值为180895.050963176\n",
      "第90次的训练在训练集损失值为178444.99970240163\n",
      "第91次的训练在训练集损失值为177442.0835339045\n",
      "第92次的训练在训练集损失值为231167.545480415\n",
      "第93次的训练在训练集损失值为144619.77420647678\n",
      "第94次的训练在训练集损失值为138903.2016663336\n",
      "第95次的训练在训练集损失值为190347.99602478102\n",
      "第96次的训练在训练集损失值为142622.08501972404\n",
      "第97次的训练在训练集损失值为129972.04983469172\n",
      "第98次的训练在训练集损失值为133580.83645992633\n",
      "第99次的训练在训练集损失值为130630.33648816557\n",
      "第100次的训练在训练集损失值为133435.76417610873\n"
     ]
    }
   ],
   "source": [
    "# 加载数据\n",
    "train_loader = Data.DataLoader(dataset = train_data, batch_size = batch_size, \n",
    "                               shuffle = True, num_workers = 1)\n",
    "test_loader = Data.DataLoader(dataset = test_data, batch_size = batch_size, \n",
    "                               shuffle = True, num_workers = 1)\n",
    "train_loss_all = []\n",
    "test_loss_all = []\n",
    "# 对模型迭代训练，总共epoch轮\n",
    "for epoch in range(epochs):\n",
    "    train_loss = 0\n",
    "    train_num = 0\n",
    "    test_loss = 0\n",
    "    test_num = 0\n",
    "    # 对训练数据的加载器进行迭代计算\n",
    "    for step, (b_x, b_y) in enumerate(train_loader):\n",
    "        output = testnet(b_x) # MLP在训练batch上的输出\n",
    "        loss = loss_func(output, b_y) # 均方根损失函数\n",
    "        optimizer.zero_grad() # 每次迭代梯度初始化0\n",
    "        train_loss += loss.item() * b_x.size(0)\n",
    "        train_num += b_x.size(0)\n",
    "        loss.backward() # 反向传播，计算梯度\n",
    "        optimizer.step() # 使用梯度进行优化\n",
    "    train_loss_all.append(train_loss / train_num)\n",
    "    print(f\"第{epoch+1}次的训练在训练集损失值为{train_loss/ train_num}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 207,
   "id": "dfed7681-7d9c-4cac-a0ec-45030ee3cfa7",
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "在测试集上的绝对值误差为: 221.8933241008188\n",
      "在测试集上的拟合效果大小为: 0.9187616264557876\n",
      "在测试集上的均方误差为: 478.943597604661\n"
     ]
    }
   ],
   "source": [
    "y_pre = testnet(X_test_t)\n",
    "y_pre = y_pre.data.numpy()\n",
    "mae = mean_absolute_error(test_y, y_pre)\n",
    "r2 = r2_score(test_y,y_pre)\n",
    "rmse = np.sqrt(mean_squared_error(test_y,y_pre))\n",
    "print('在测试集上的绝对值误差为:', mae)\n",
    "print('在测试集上的拟合效果大小为:', r2)\n",
    "print('在测试集上的均方误差为:', rmse)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "a3816679-d0c7-47ae-ba5a-3dcef73eaa5c",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 203,
   "id": "839e1b94-5770-4a2a-8dae-d931821aa88b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5, 1.0, 'R^2 value with each model')"
      ]
     },
     "execution_count": 203,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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t7e3Urm3tzdOnjxZaLuQkBAkJiZi/vz5JXqf7OxsZGVlKT2IiIhIunQWblJTU5GXlwc7Ozulcjs7Ozx48EBtm+vXr2PmzJkICwuDvn7J5kIHBwfDwsJC8XB0dCxz34mIiKjy0lm4KfD6PJ3Xb+VQIC8vD0OGDMHChQvRqFGjEi9/1qxZyMzMVDzu3LlT5j4TERFR5aXxjTPLysbGBnp6eip7aVJSUlT25gDA48ePERsbi7i4OEycOBEAkJ+fDyEE9PX1ERkZqfZMLblcDrlcXj4rQURERJWOzvbcGBoaom3btoiKilIqj4qKQufOnVXqm5ub488//8TFixcVj3HjxqFx48a4ePEiOnToUFFdJyIiokpMZ3tuACAoKAgffPAB2rVrh06dOmHDhg24ffs2xo0bB+DfQ0r37t3Dtm3bUK1aNTRr1kypfc2aNWFkZKRSTkRERP9dOg03gwcPRlpaGhYtWoTk5GQ0a9YMERERcHJyAgAkJycXe80bIiIiolfp9Do3usDr3FBlw21GPY5L4Tg26nFciiCBwakS17khIiIiKg8MN0RERCQpDDdEREQkKQw3REREJCkMN0RERCQpDDdEREQkKQw3REREJCkMN0RERCQpDDdEREQkKQw3REREJCkMN0RERCQpDDdEREQkKQw3REREJCkMN0RERCQpDDdEREQkKQw3REREJCkMN0RERCQpDDdEREQkKQw3REREJCkMN0RERCQpDDdEREQkKQw3REREJCkMN0RERCQpDDdEREQkKQw3REREJCkMN0RERCQpDDdEREQkKQw3REREJCkMN0RERCQpDDdEREQkKQw3REREJCkMN0RERCQpDDdEREQkKQw3REREJCkMN0RERCQpDDdEREQkKQw3REREJCkMN0RERCQpDDdEREQkKQw3REREJCkMN0RERCQpDDdEREQkKQw3REREJCkMN0RERCQpDDdEREQkKQw3REREJCkMN0RERCQpDDdEREQkKQw3REREJCkMN0RERCQpDDdEREQkKQw3REREJCkMN0RERCQpDDdEREQkKQw3REREJCkMN0RERCQpDDdEREQkKQw3REREJCkMN0RERCQpDDdEREQkKQw3REREJCkMN0RERCQpDDdEREQkKQw3REREJCkMN0RERCQpDDdEREQkKToPN+vWrUO9evVgZGSEtm3b4sSJE4XW3bdvH3r06AFbW1uYm5ujU6dO+PXXXyuwt0RERFTZ6TTc7N69G1OmTMGcOXMQFxeHLl26oFevXrh9+7ba+sePH0ePHj0QERGB8+fPw8PDA71790ZcXFwF95yIiIgqK5kQQujqzTt06IA2bdpg/fr1ijJXV1e88847CA4OLtEymjZtisGDB2PevHklqp+VlQULCwtkZmbC3Nxco34XRSbT+iKLpLtPj7SF24x6HJfCcWzU47gUQQKDU5rfb53tuXn58iXOnz8Pb29vpXJvb2+cPHmyRMvIz8/H48ePUaNGjULrZGdnIysrS+lBRERE0qWzcJOamoq8vDzY2dkpldvZ2eHBgwclWsZnn32Gp0+fYtCgQYXWCQ4OhoWFheLh6OhYpn4TERFR5abzCcWy13aVCSFUytTZuXMnFixYgN27d6NmzZqF1ps1axYyMzMVjzt37pS5z0RERFR56evqjW1sbKCnp6eylyYlJUVlb87rdu/ejVGjRmHPnj3w8vIqsq5cLodcLi9zf4mIiKhq0NmeG0NDQ7Rt2xZRUVFK5VFRUejcuXOh7Xbu3ImAgADs2LEDfn5+5d1NIiIiqmJ0tucGAIKCgvDBBx+gXbt26NSpEzZs2IDbt29j3LhxAP49pHTv3j1s27YNwL/BZtiwYfjf//6Hjh07Kvb6GBsbw8LCQmfrQURERJWHTsPN4MGDkZaWhkWLFiE5ORnNmjVDREQEnJycAADJyclK17z59ttvkZubiwkTJmDChAmK8uHDhyM0NLSiu09ERESVkE6vc6MLvM4NVTbcZtTjuBSOY6Mex6UIEhicKnGdGyIiIqLywHBDREREksJwQ0RERJLCcENERESSwnBDREREksJwQ0RERJLCcENERESSwnBDREREksJwQ0RERJLCcENERESSwnBDREREksJwQ0RERJLCcENERESSwnBDREREksJwQ0RERJLCcENERESSwnBDREREksJwQ0RERJLCcENERESSwnBDREREksJwQ0RERJLCcENERESSwnBDREREksJwQ0RERJLCcENERESSwnBDREREksJwQ0RERJLCcENERESSwnBD5e7atWvo2bMnTE1NUbNmTUyePBnPnz8vUdutW7eiSZMmMDIyQrNmzbBnzx6VOjdv3oS/vz9q1aoFMzMztGnTBmFhYdpeDSIiqiL0dd0BkraMjAx4enrCyckJ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zc7OxqRJk1CzZk0YGRnhzTffxLlz55TqREREoFGjRjA2NoaHhwdu3ryp8p4nT57EW2+9BWNjYzg6OmLSpEmlupN2QEAA3nnnHaxevRoODg6wtrbGhAkTkJOTo6izfft2tGvXDtWrV4e9vT2GDBmClJQUxesFh8t+/fVXtG7dGsbGxvD09ERKSgp++eUXuLq6wtzcHP7+/nj27JminRACK1euRP369WFsbIyWLVti7969Je47EZUeww0RldqIESMQEhKieL5lyxaMHDlSpd706dMRHh6OrVu34sKFC3BxcYGPjw8ePXoEALhz5w769+8PX19fXLx4EaNHj8bMmTOVlvHnn3/Cx8cH/fv3x6VLl7B792789ttvpb5Lc3R0NBITExEdHY2tW7ciNDQUoaGhitdfvnyJxYsX448//sCBAweQlJSk9hDbggUL8NVXX+HkyZO4c+cOBg0ahC+++AI7duzAzz//jKioKKxdu1ZR/9NPP0VISAjWr1+Pv/76C1OnTsX777+PmJiYUvWfiEqhXG/LSUSSUnDn4X/++UfI5XKRlJQkbt68KYyMjMQ///wj+vbtq7jb75MnT4SBgYEICwtTtH/58qWoVauWWLlypRBCiFmzZglXV1elu3LPmDFD6a7fH3zwgfjwww+V+nHixAlRrVo18fz5cyFE4XfNfrXfTk5OIjc3V1H27rvvisGDBxfa5uzZswKAePz4sRDi/99h/fDhw4o6wcHBAoBITExUlI0dO1b4+PgoxsDIyEicPHlSadmjRo0S/v7+hb43EZUN7y1FRKVmY2MDPz8/bN26FUII+Pn5wcbGRqlOYmIicnJy4O7urigzMDBA+/btkZCQAABISEhAx44dIZPJFHU6deqktJzz58/j77//RlhYmKJMCIH8/HwkJSXB1dW1RH1u2rQp9PT0FM8dHBzw559/Kp7HxcVhwYIFuHjxIh49eoT8/HwAwO3bt+Hm5qao16JFC8X/29nZwcTEBPXr11cqO3v2LAAgPj4eL168QI8ePZT68vLlS5VDeESkPQw3RKSRkSNHKg4Nff311yqvi/+7bd2rwaWgvKBMlODWdvn5+Rg7diwmTZqk8lppJjC/fnNEmUymCDBPnz6Ft7c3vL29sX37dtja2uL27dvw8fHBy5cvC12OTCYrcrkF//35559Ru3ZtpXpyubzEfSei0mG4ISKN9OzZU/HD7+Pjo/K6i4sLDA0N8dtvv2HIkCEA/r0rc2xsLKZMmQIAcHNzw4EDB5TanT59Wul5mzZt8Ndff8HFxUX7K/F/rly5gtTUVCxfvhyOjo4AgNjY2DIv183NDXK5HLdv30bXrl3LvDwiKhmGGyLSiJ6enuLw0quHewqYmprio48+wieffIIaNWqgbt26WLlyJZ49e4ZRo0YBAMaNG4fPPvsMQUFBGDt2LM6fP680yRcAZsyYgY4dO2LChAkYM2YMTE1NkZCQoDJxtyzq1q0LQ0NDrF27FuPGjcPly5exePHiMi+3evXqmDZtGqZOnYr8/Hy8+eabyMrKwsmTJ2FmZobhw4drofdE9DqeLUVEGjM3N4e5uXmhry9fvhwDBgzABx98gDZt2uDvv//Gr7/+CisrKwD/horw8HAcPHgQLVu2xDfffINly5YpLaNFixaIiYnB9evX0aVLF7Ru3Rpz586Fg4OD1tbD1tYWoaGh2LNnD9zc3LB8+XKsXr1aK8tevHgx5s2bh+DgYLi6usLHxwcHDx5EvXr1tLJ8IlIlEyU56E1ERERURXDPDREREUkKww0RERFJCsMNERERSQrDDREREUkKww0RERFJCsMNERERSQrDDREREUkKww0RERFJCsMNERERSQrDDREREUkKww0RERFJCsMNERERScr/AxlaDPK5RwzhAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "r2_result =r2_all+ [r2]\n",
    "x = range(len(r2_result))\n",
    "name_list = [\"lr\",\"svm\",\"KNeighbors\",\"tree\",\"GRboost\",\"lgb\",\"FC-Net\"]\n",
    "rects1 = plt.bar(x=x, height=r2_result,color=[\"b\",\"b\",\"b\",\"b\",\"b\",\"b\",\"r\"], width=0.4, label=\"R^2\")\n",
    "for a,b in zip(x,r2_result):\n",
    "    plt.text(a, b,'%.2f'%b, ha = 'center',va ='baseline',fontsize=11)\n",
    "plt.xticks([index for index in x], name_list)\n",
    "plt.legend()\n",
    "plt.ylabel(\"accrucy\")\n",
    "plt.xlabel(\"Model name\")\n",
    "plt.title(\"R^2 value with each model\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "4970a2f2-5967-4149-af0d-cf8c8f8bc8b1",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.13"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
